package com.mkx.multitier.resource;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 资源管理器接口，定义资源分配、回收和监控的基本操作
 */
public interface ResourceManager {
    
    /**
     * 初始化资源管理器
     */
    void initialize();
    
    /**
     * 启动资源管理器
     */
    void start();
    
    /**
     * 关闭资源管理器
     */
    void shutdown();
    
    /**
     * 分配一个资源对象
     * @param resourceType 资源类型
     * @return 分配的资源对象
     * @throws ResourceAllocationException 资源分配失败时抛出
     */
    <T> T allocateResource(String resourceType) throws ResourceAllocationException;
    
    /**
     * 回收资源对象
     * @param resourceType 资源类型
     * @param resource 要回收的资源对象
     */
    <T> void releaseResource(String resourceType, T resource);
    
    /**
     * 获取线程池资源
     * @param poolName 线程池名称
     * @return 线程池对象
     */
    ExecutorService getThreadPool(String poolName);
    
    /**
     * 提交任务到指定线程池
     * @param poolName 线程池名称
     * @param task 要执行的任务
     * @return Future对象表示异步任务结果
     */
    Future<?> submitTask(String poolName, Runnable task);
    
    /**
     * 获取资源使用统计信息
     * @return 资源使用统计
     */
    ResourceStatistics getResourceStatistics();
    
    /**
     * 调整资源池大小
     * @param resourceType 资源类型
     * @param newSize 新的资源池大小
     */
    void resizeResourcePool(String resourceType, int newSize);
    
    /**
     * 检查资源健康状态
     * @return 是否健康
     */
    boolean checkHealth();
}
